<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
const find = (p, x) => {
    if(p[x] !== x) p[x] = find(p, p[x])
    return p[x]
}

var maximumSegmentSum = function(nums, removeQueries) {
    // p 为父节点， s为当前连通子树的和
    let n = nums.length, p = Array.from({length:n},(v,i) => i), s = Array(n).fill(0), max = 0 , ans = []
    for(let i = n - 1; i >= 0; i--){
        let x = removeQueries[i]
        s[x] = nums[x] 
        // 这里取当前数为x, 尝试和 x + 1，x - 1 进行连通
        for(let j = x - 1; j <= x + 1; j += 2){
            // 如果x + 1 或者 x - 1 边界是合法的  且 已经插入过了  触发合并
            if(j >= 0 && j < n && s[j]){
                s[x] += s[find(p, j)]
                p[find(p, j)] = x 
            }
        }
        // 因为题目正序 是先删除 后算结果，那反过来 应该先算结果 后插入值
        ans.push(max)
        max = Math.max(s[x], max)
    }

    return ans.reverse()
};
  </script>
</body>
</html>